package com.tyut.musicdreamer.service.music.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tyut.musicdreamer.service.music.model.dto.PlaylistCreateRequest;
import com.tyut.musicdreamer.service.music.model.entity.Playlist;
import com.tyut.musicdreamer.service.music.model.vo.MusicVO;
import com.tyut.musicdreamer.service.music.model.vo.PlaylistVO;

import java.util.List;

/**
 * 歌单服务接口
 */
public interface PlaylistService extends IService<Playlist> {
    
    /**
     * 创建歌单
     *
     * @param userId 用户ID
     * @param request 歌单创建请求
     * @return 歌单ID
     */
    Long createPlaylist(Long userId, PlaylistCreateRequest request);
    
    /**
     * 获取歌单详情
     *
     * @param playlistId 歌单ID
     * @return 歌单详情
     */
    PlaylistVO getPlaylistDetail(Long playlistId);
    
    /**
     * 获取用户创建的歌单列表
     *
     * @param userId 用户ID
     * @return 歌单列表
     */
    List<PlaylistVO> getUserPlaylists(Long userId);
    
    /**
     * 分页获取歌单列表
     *
     * @param page 分页参数
     * @return 歌单分页列表
     */
    Page<PlaylistVO> getPlaylistPage(Page<Playlist> page);
    
    /**
     * 更新歌单信息
     *
     * @param userId 用户ID
     * @param playlistId 歌单ID
     * @param request 歌单更新请求
     * @return 是否成功
     */
    boolean updatePlaylist(Long userId, Long playlistId, PlaylistCreateRequest request);
    
    /**
     * 删除歌单
     *
     * @param userId 用户ID
     * @param playlistId 歌单ID
     * @return 是否成功
     */
    boolean deletePlaylist(Long userId, Long playlistId);
    
    /**
     * 添加歌曲到歌单
     *
     * @param userId 用户ID
     * @param playlistId 歌单ID
     * @param musicIds 歌曲ID列表
     * @return 添加数量
     */
    int addMusicsToPlaylist(Long userId, Long playlistId, List<Long> musicIds);
    
    /**
     * 从歌单中移除歌曲
     *
     * @param userId 用户ID
     * @param playlistId 歌单ID
     * @param musicIds 歌曲ID列表
     * @return 移除数量
     */
    int removeMusicsFromPlaylist(Long userId, Long playlistId, List<Long> musicIds);
    
    /**
     * 更新歌单封面
     *
     * @param userId 用户ID
     * @param playlistId 歌单ID
     * @param coverUrl 封面URL
     * @return 是否成功
     */
    boolean updatePlaylistCover(Long userId, Long playlistId, String coverUrl);
    
    /**
     * 获取歌单中的歌曲列表
     *
     * @param playlistId 歌单ID
     * @return 歌曲列表
     */
    List<MusicVO> getPlaylistMusics(Long playlistId);
} 